---@class GT.mover 运动器
GT.mover = class()

---@class mover_data


function GT.mover:ctor(data)

end

--- 创建曲线运动器
---@param unit Unit 单位
---@param angle Unit 运动方向
---@param max_dist Float 最大距离
---@param init_velocity Float 初始速度
---@param acceleration Float 加速度
---@param max_velocity Float 最大速度
---@param min_velocity Float 最小速度
---@param init_height Float 起始高度
---@param fin_height Float 终点高度
---@param collision_type Int32 碰撞类型
---@param collision_radius Float 碰撞范围
---@param is_face_angle Bool 是否始终面向运动方向
---@param is_multi_collision Bool 是否能多次碰撞同一个物体
---@param terrain_block Bool 地形阻挡
---@param priority Int32 优先级数
---@param is_absolute_height Bool 使用绝对高度
---@param path CurvedPath 路径
---@param f_mover_finish Function 运动完成事件
---@param f_mover_interrupt Function 运动打断事件
---@param f_mover_removed Function 运动移除事件
---@param f_terrain_collide Function 地形碰撞事件
---@param f_unit_collide Function 单位碰撞事件
function GT.mover.create_curved_mover(unit, angle, max_dist, init_velocity, acceleration, max_velocity, min_velocity, init_height,
                             fin_height, collision_type, collision_radius, is_face_angle, is_multi_collision,
                             terrain_block, priority, is_absolute_height, path, f_mover_finish, f_mover_interrupt,
                             f_mover_removed, f_terrain_collide, f_unit_collide)
    game_api.create_curved_mover(unit, angle, max_dist, init_velocity, acceleration, max_velocity, min_velocity,
        init_height, fin_height, collision_type, collision_radius, is_face_angle, is_multi_collision, terrain_block,
        priority, is_absolute_height, path, f_mover_finish, f_mover_interrupt, f_mover_removed, f_terrain_collide,
        f_unit_collide)
end

--- 创建追踪运动器
---@param unit Unit 单位
---@param target_unit Unit 目标单位
---@param stop_distance_to_target Float 停止距离
---@param init_velocity Float 初始速度
---@param acceleration Float 加速度
---@param max_velocity Float 最大速度
---@param min_velocity Float 最小速度
---@param init_height Float 起始高度
---@param parabola_height Float 抛物线高度
---@param bind_point Str 附着点
---@param collision_type Int32 碰撞类型
---@param collision_radius Float 碰撞范围
---@param is_face_angle Bool 是否始终面向运动方向
---@param is_multi_collision Bool 是否能多次碰撞同一个物体
---@param terrain_block Bool 地形阻挡
---@param priority Int32 优先级数
---@param is_absolute_height Bool 使用绝对高度
---@param f_mover_finish Function 运动完成事件
---@param f_mover_interrupt Function 运动打断事件
---@param f_mover_removed Function 运动移除事件
---@param f_terrain_collide Function 地形碰撞事件
---@param f_unit_collide Function 单位碰撞事件
function GT.mover.create_chasing_mover(unit, target_unit, stop_distance_to_target, init_velocity, acceleration, max_velocity,
                              min_velocity, init_height, parabola_height, bind_point, collision_type, collision_radius,
                              is_face_angle, is_multi_collision, terrain_block, priority, is_absolute_height,
                              f_mover_finish, f_mover_interrupt, f_mover_removed, f_terrain_collide, f_unit_collide)
    game_api.create_chasing_mover(unit, target_unit, stop_distance_to_target, init_velocity, acceleration, max_velocity,
        min_velocity, init_height, parabola_height, bind_point, collision_type, collision_radius, is_face_angle,
        is_multi_collision, terrain_block, priority, is_absolute_height, f_mover_finish, f_mover_interrupt,
        f_mover_removed, f_terrain_collide, f_unit_collide)
end

--- 创建直线运动器
---@param unit Unit 单位
---@param angle Unit 运动方向
---@param max_dist Float 最大距离
---@param init_velocity Float 初始速度
---@param acceleration Float 加速度
---@param max_velocity Float 最大速度
---@param min_velocity Float 最小速度
---@param init_height Float 起始高度
---@param fin_height Float 终点高度
---@param parabola_height Float 抛物线高度
---@param collision_type Int32 碰撞类型
---@param collision_radius Float 碰撞范围
---@param is_face_angle Bool 是否始终面向运动方向
---@param is_multi_collision Bool 是否能多次碰撞同一个物体
---@param terrain_block Bool 地形阻挡
---@param priority Int32 优先级数
---@param is_absolute_height Bool 使用绝对高度
---@param f_mover_finish Function 运动完成事件
---@param f_mover_interrupt Function 运动打断事件
---@param f_mover_removed Function 运动移除事件
---@param f_terrain_collide Function 地形碰撞事件
---@param f_unit_collide Function 单位碰撞事件
function GT.mover.create_straight_mover(unit, angle, max_dist, init_velocity, acceleration, max_velocity, min_velocity,
                               init_height, fin_height, parabola_height, collision_type, collision_radius, is_face_angle,
                               is_multi_collision, terrain_block, priority, is_absolute_height, f_mover_finish,
                               f_mover_interrupt, f_mover_removed, f_terrain_collide, f_unit_collide)
    game_api.create_straight_mover(unit, angle, max_dist, init_velocity, acceleration, max_velocity, min_velocity,
        init_height, fin_height, parabola_height, collision_type, collision_radius, is_face_angle, is_multi_collision,
        terrain_block, priority, is_absolute_height, f_mover_finish, f_mover_interrupt, f_mover_removed,
        f_terrain_collide, f_unit_collide)
end

--- 创建环绕运动器
---@param unit Unit 单位
---@param target_unit Unit 目标单位
---@param circle_radius Float 圆周半径
---@param angle_velocity Float 角速度
---@param init_angle Float 初始角度
---@param counterclockwise Float 方向
---@param round_time Float 环绕时间
---@param centrifugal_velocity Float 离心速度
---@param lifting_velocity Str 提升速度
---@param around_init_height Float 环绕高度
---@param collision_type Int32 碰撞类型
---@param collision_radius Float 碰撞范围
---@param is_face_angle Bool 是否始终面向运动方向
---@param is_multi_collision Bool 是否能多次碰撞同一个物体
---@param terrain_block Bool 地形阻挡
---@param priority Int32 优先级数
---@param is_absolute_height Bool 使用绝对高度
---@param target_pos Vector3 目标坐标
---@param f_mover_finish Function 运动完成事件
---@param f_mover_interrupt Function 运动打断事件
---@param f_mover_removed Function 运动移除事件
---@param f_terrain_collide Function 地形碰撞事件
---@param f_unit_collide Function 单位碰撞事件
function GT.mover.create_round_mover(unit, target_unit, circle_radius, angle_velocity, init_angle, counterclockwise, round_time,
                            centrifugal_velocity, lifting_velocity, around_init_height, collision_type, collision_radius,
                            is_face_angle, is_multi_collision, terrain_block, priority, is_absolute_height, target_pos,
                            f_mover_finish, f_mover_interrupt, f_mover_removed, f_terrain_collide, f_unit_collide)
    game_api.create_round_mover(unit, target_unit, circle_radius, angle_velocity, init_angle, counterclockwise,
        round_time, centrifugal_velocity, lifting_velocity, around_init_height, collision_type, collision_radius,
        is_face_angle, is_multi_collision, terrain_block, priority, is_absolute_height, target_pos, f_mover_finish,
        f_mover_interrupt, f_mover_removed, f_terrain_collide, f_unit_collide)
end

--- 删除单位运动器
---@param unit Unit 单位
function GT.mover.remove_unit_mover(unit)
    game_api.remove_unit_mover(unit)
end

--- 打断单位运动器
---@param unit Unit 单位
function GT.mover.break_unit_mover(unit)
    game_api.break_unit_mover(unit)
end

--- 运动器碰撞单位
---@return Unit
function GT.mover.get_mover_collide_unit()
    return game_api.get_mover_collide_unit()
end
